07. 解决方案:条件布尔表达式
练习解决方案:评估复合布尔表达式
altitude < 1000 and speed > 100
altitude < 1000
为
False
,因此我们甚至不需要检查第二个条件,整个表达式为
False
。
(propulsion == "Jet" or propulsion == "Turboprop") and speed < 300 and altitude > 20000
propulsion == "Jet"
为
False
,并且
propulsion == "Turboprop"
为
False
,因此括号内的整个表达式为
False
。它使用
and
与另一个表达式相结合,因此我们甚至不需要检查这些表达式,整个表达式肯定为
False
,因为第一部分为
False
。
not (speed > 400 and propulsion == "Propeller")
要判断这道练习,我们需要首先查看括号里的内容,然后向其应用
not
。
speed > 400
为 False,因为我们使用
and
,这使得括号里的整个表达式为
False
。应用
not
使该表达式变成
True
。
(altitude > 500 and speed > 100) or not propulsion == "Propeller"
我们先看看括号里的表达式。
altitude > 500
为
True
,并且
speed
大于
100
,因此括号里的表达式为
True
。无论其他表达式的值是什么,因为它们是用
or
连接起来的,整个表达式将为
True
。
这里我们还要介绍一个布尔表达式求值所用的技术—— 短路求值
如果
a = False
,对于
a and b
求值时,将直接得到结果为
False
,不会再对
b
的值做考核,不论它是
True
或
False
。
如果
a = True
,对于
a or b
求值时,将直接得到结果为
True
,不会再对
b
的值做考核,不论它是
True
或
False
。
你能思考一下这是为什么吗?
练习解决方案:使用对象的真假值
我们首先设置
prize = None
,如果得分能够获得奖品,则更新
prize
。然后如果有奖品的话,使用
prize
的真假值输出消息,如果没有奖品,则输出另一条消息。
prize = None
if points <= 50:
prize = "a wooden rabbit"
elif 151 <= points <= 180:
prize = "a wafer-thin mint"
elif points >= 181:
prize = "a penguin"
if prize:
result = "Congratulations! You won " + prize + "!"
else:
result = "Oh dear, no prize this time."
print(result)